//pwa : 
//  更新  service_worker.js -> 会触发install
//   所以  其他文件的更新 都在这里控制!!!

// 注意 : 非https, 无效 证书 都 无法注册 pwa

//    


//service_worker.js
//  事件 : 
//    install -> 新version缓存.
//    active -> 处理旧的缓存.(不是当前version的)
//    fetch
//        不劫持 -> 原样.
//        劫持 -> 处理. . 
//          1. 直接返回 cache
//          2. 先fetch远端. 
//              ok: clone fetch结果保存到cache, 并返回fetch的结果.
//              failed: 返回cache结果.



// const V=1;
// console.log("version="+V);



// //TODO
//最佳策略
const VERSION='prefetch-cache-v' + 2;

//   var FILE_LISTS = ['html', 'js', 'css', 'png', "ico", "mp3"];
  var FILE_LISTS = ["mp3"];
  
  var goSaving = function (url) {
    for (var file of FILE_LISTS) {
      if (url.endsWith(file)) return true;
    }
    return false;
  }
  
  self.addEventListener('fetch', function (event) {
    event.respondWith(
      caches.match(event.request).then(function (resp) {
        return resp || fetch(event.request).then(function (response) {
          // 检查是否需要缓存
          var url = event.request.url;
          if (!goSaving(url)) return response;
          console.log('save file:' + url);
          // 需要缓存,则将资源放到 caches Object 中
          return caches.open(VERSION).then(function (cache) {
            console.log('update files :' + event.request.url);
            if (response.status != 206) {
              //不支持206, 别的不清楚!!
              cache.put(event.request, response.clone());
            }
            return response;
          });
        });
      })
    );
  });
//   self.addEventListener('message', event => {
//     console.log("receive message" + event.data);
//     // 更新根目录下的 html 文件。
//     var url = event.data;
//     console.log("update root file " + url);
//     event.waitUntil(
//       caches.open(VERSION.prefetch).then(cache => {
//         return fetch(url)
//           .then(res => {
//             cache.put(url, res);
//           })
//       })
//     )
//   });
  
  

